package com.codeZ.FacadePattern;

import com.codeZ.FacadePattern.impl.AVIDecoderImpl;
import com.codeZ.FacadePattern.impl.Mp4DecodeImpl;
import com.codeZ.FacadePattern.impl.WMVDecoderImpl;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;

/**
 * 视屏解码器工厂类
 *
 * @author codeZhang
 * @Date 2024/8/14 16:29
 */
public class VideoDecodeFactory {

    private static final Map<String, Supplier<VideoDecode>> decoderMap = new HashMap<>();

    static {
        // 初始化映射
        decoderMap.put(".mp4", Mp4DecodeImpl::new);
        decoderMap.put(".avi", AVIDecoderImpl::new);
        decoderMap.put(".wmv", WMVDecoderImpl::new);
    }

    public static VideoDecode getVideoDecode(String videoFile) {
        // 提取文件扩展名（这里简化处理，没有考虑点号不在最后一位的情况）
        String extension = getExtension(videoFile);
        // 从映射中获取对应的解码器构造函数引用
        Supplier<VideoDecode> decoderSupplier = decoderMap.get(extension);
        if (decoderSupplier != null) {
            // 使用构造函数引用创建解码器实例
            return decoderSupplier.get();
        } else {
            throw new IllegalArgumentException("Unsupported video format: " + videoFile);
        }
    }

    // 辅助方法，用于提取文件扩展名
    private static String getExtension(String filename) {
        int lastIndexOfDot = filename.lastIndexOf('.');
        if (lastIndexOfDot == -1) return "";
        return filename.substring(lastIndexOfDot).toLowerCase();
    }
}
